package com.cwt_taxi_xa.protocol;

import android.content.Context;

import com.cwt_taxi_xa.ActivityPower;
import com.cwt_taxi_xa.MainApplication;
import com.cwt_taxi_xa.constants.ConstantsState;
import com.cwt_taxi_xa.constants.MyStatus;
import com.cwt_taxi_xa.data.DataUtil;
import com.cwt_taxi_xa.model.AaData;
import com.cwt_taxi_xa.protocol.config.MeterConfigTask;
import com.cwt_taxi_xa.service.SerialPortService;
import com.cwt_taxi_xa.util.AppLog;
import com.cwt_taxi_xa.util.ExceptionUtil;
import com.cwt_taxi_xa.util.Tools;


/**
 *
 * 项目名称：Dss_CarCall_Sz 类名称：MeterDecoder 类描述： 创建人：Administrator 创建时间：2016-5-31
 * 上午10:35:29 修改人：Administrator 修改时间：2016-5-31 上午10:35:29 修改备注：
 *
 * @version 1.0
 *
 */
public class MeterDecoder {
	private static final String TAG = "MeterDecoder";

	//聚利计价器bug，当运营结束后会传一次重车心跳
	public static boolean jlbug = false;

	//临时保存心跳上来的计价器中司机信息
	public static String sijiCode_jjq = "";
	public static String qiyeCode_jjq = "";
	static MeterConfigTask meterConfigTask = new MeterConfigTask();
	/**
	 * 处理计价器数据接口
	 *
	 * @param mid
	 *            命令字
	 * @param dataContent
	 *            数据区
	 */

	static String dataContent_str;
	public static void processMeter(String mid, byte[] dataContent, Context context) {

//		AppLog.i( "mid=====" + mid);
		dataContent_str = Tools.parseByte2HexStr(dataContent);
		AppLog.savelog("接收计价器数据：   mid："+mid+"   data："+dataContent_str);
		AppLog.e("接收计价器数据：   mid："+mid+"   data："+dataContent_str);
//		AppLog.i( "dataContent=====" + dataContent_str);

		AaData aaData = new AaData();
		try {
			int cmd = Integer.parseInt(mid, 16);
			aaData.setMid(cmd);
			switch (cmd) {

				case 0x00E7: // 重车，单次运营开始
					try {
						sendInfo2DIDA(3, dataContent);
						//try {
						//	MainApplication.topActivity.sendpic(1);//启动数人头
						//} catch (Exception e) {
						//	e.printStackTrace();
						//}
						// SendDateToSerial.witeSerialInfo("MeterDecoder-重车，单次运营开始",
						// MeterEncoder.answerLoad(SerialConstants.ACK));
						int num = 0;
						// 进入重车时间 BCD7 YYYYMMDDHHMMSS
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 7)));
						num += 7;
						// 当前车次 uint32
						// aaData.getDataList().add(Integer.parseInt(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent,
						// num, 4)),16));
						// num += 4;

						MeterBusinessProcess.processMeter(aaData, context);
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					break;
				case 0x0030: // 停车收费
					try {
						int num = 0;
						// 计价器数据
						aaData.getDataList().add(dataContent);
						MeterBusinessProcess.processMeter(aaData, context);
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					break;
				case 0x00E8: // 上传运营数据
					try {
						sendInfo2DIDA(4, dataContent);

						//try {
						//	MainApplication.topActivity.sendpic(2);
						//} catch (Exception e) {
						//	e.printStackTrace();
						//}

						// SendDateToSerial.witeSerialInfo("MeterDecoder-上传运营数据",
						// MeterEncoder.answerLoad(SerialConstants.ACK));

						MyStatus.zhongche = false;
						ConstantsState.setStateValue(9, "0");

						jlbug = true;

						//南京通用计价器，在30秒内取消的，会发空E8指令
						if(DataUtil.getJJQ()==2&&dataContent_str.startsWith("0000000000000000")){
							AppLog.e("运营取消");
							SerialPortService.getInstance().sendSerialData6(EncoderSZ55aa.getMeterDtuBody("00E8", Tools.parseHexStr2Byte("90")));
							if(MainApplication.topActivity!=null) MainApplication.topActivity.sendMsg(1011, true);
							return;
						}

						//判断计价器上来的日期和安卓机是否匹配，不匹配就改数据
//					String aztime = DateUtil.getTodayDate(DateUtil.df9).substring(2);
//					if(!aztime.startsWith("70")){
//						String jjqtime = Tools.bcd2Str(Tools.byteTobyte(dataContent, 41, 3));
////					AppLog.e("运营数据不准测试---decoder上车时间aztime："+aztime+".");
////					AppLog.e("运营数据不准测试---decoder上车时间jjqtime："+jjqtime+".");
//						if(!jjqtime.equals(aztime)){
//							System.arraycopy(Tools.str2Bcd(aztime), 0, dataContent, 41, 3);
//						}
//					}



						//判断车牌号是否有异常字节
						for (int i = 0; i < 6; i++) {
							if(dataContent[i]<0x20||dataContent[i]>0x7E){
								dataContent[i] = 0x41;
							}
						}


//					// 计价器数据
						aaData.getDataList().add(dataContent);

						int num = 0;
						// 车牌号
//					TimerCommon.sendLog(2, Tools.parseByte2HexStr2(Tools.byteTobyte(dataContent, num, 6)));
						String carnumber = new String(Tools.byteTobyte(dataContent, num, 6), "ascii");
						aaData.getDataList().add(carnumber);
						num += 6;
						// 经营许可证号
						aaData.getDataList().add(Tools.byteToString(Tools.byteTobyte(dataContent, num, 16), 0, 16));
						num += 16;
						// 司机从业资格证号
						aaData.getDataList().add(Tools.byteToString(Tools.byteTobyte(dataContent, num, 19), 0, 19));
						num += 19;

						// 上车时间


						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 5)));
//					AppLog.e("运营数据不准测试---decoder上车时间："+Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 5)));
						num += 5;




						// 下车时间
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
//					AppLog.e("运营数据不准测试---decoder下车时间："+Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 计程公里
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 3)));
						num += 3;
						// 空驶里程
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 附加费
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 3)));
						num += 3;
						//等待记时时间
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						AppLog.e("运营数据不准测试---decoder记时时间："+Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 交易金额
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 3)));
						num += 3;
						// 当前车次
						aaData.getDataList().add(Integer.parseInt(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 4)), 16));
						num += 4;
						// 交易类型
						aaData.getDataList().add(Integer.parseInt(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)), 16));
						num += 1;

						MeterBusinessProcess.processMeter(aaData, context);

					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					break;
				case 0x00F2: // 运营数据补传
					try {
//					SendDateToSerial.witeSerialInfo("MeterDecoder-运营数据补传", MeterEncoder.answerLoad(SerialConstants.ACK));
						int num = 0;
						// 计价器数据
						aaData.getDataList().add(dataContent);
						try {
							// 车牌号
							aaData.getDataList().add(Tools.byteToString(Tools.byteTobyte(dataContent, num, 6), 0, 6));
							num += 6;
							// 经营许可证号
							aaData.getDataList().add(Tools.byteToString(Tools.byteTobyte(dataContent, num, 16), 0, 16));
							num += 16;
							// 司机从业资格证号
							aaData.getDataList().add(Tools.byteToString(Tools.byteTobyte(dataContent, num, 19), 0, 19));
							num += 19;
							// 上车时间
							aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 5)));
							num += 5;
							// 下车时间
							aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
							num += 2;
							// 计程公里
							aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 3)));
							num += 3;
							// 空驶里程
							aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
							num += 2;
							// 附加费
							aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 3)));
							num += 3;
							// 记时时间
							aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
							num += 2;
							// 交易金额
							aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 3)));
							num += 3;
							// 当前车次
							aaData.getDataList().add(Integer.parseInt(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 4)), 16));
							num += 4;
							// 交易类型
							aaData.getDataList().add(Integer.parseInt(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)), 16));
							num += 1;

						} catch (Exception e) {
							AppLog.e(ExceptionUtil.getInfo(e));
							e.printStackTrace();
						}

						MeterBusinessProcess.processMeter(aaData, context);
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					break;
				case 0x00E0: // 请求开机
					try {
						AppLog.savelog("处理计价器指令：   mid："+mid+"   0001");
						AppLog.d(TAG, "处理计价器指令：   mid："+mid+"   0001");
						int num = 0;
						// 开机标识 byte
						aaData.getDataList().add(Integer.parseInt(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)), 16));
						num += 1;
						// // 车牌号 byte[6]
						// aaData.getDataList().add(Tools.byteToString(dataContent,
						// num, 6));
						// num += 1;

						MeterBusinessProcess.processMeter(aaData, context);
						AppLog.savelog("处理计价器指令：   mid："+mid+"   0002");
						AppLog.d(TAG, "处理计价器指令：   mid："+mid+"   end");
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
						AppLog.savelog("处理计价器指令：   mid："+mid+"   0003");
					}
					break;
				case 0x0001: // 开机发送驾驶员从业资格信息应答
					try {
						int num = 0;
						// 操作结果 ACK或NAK
						aaData.getDataList().add(Integer.parseInt(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)), 16));
						num += 1;
						MeterBusinessProcess.processMeter(aaData, context);
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					break;
				case 0x00E1: // 开机结果
					try {
						sendInfo2DIDA(1, dataContent);

						ConstantsState.setStateValue(3, "0");
						DDUtil.sendText2TT(1);
						int num = 0;
						// 单位代码
						aaData.getDataList().add(Tools.byteToString(dataContent, num, 16));
						num += 16;
						// 从业资格证号
						aaData.getDataList().add(Tools.byteToString(dataContent, num, 19));
						num += 19;
						// 车牌号
						aaData.getDataList().add(Tools.byteToStringASCII(dataContent, num, 6));
						num += 6;
						// 计价器开机时间
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 6)));
						num += 6;
						// 总运营次数
						aaData.getDataList().add(Integer.parseInt(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 4)), 16));
						num += 4;
						// 操作结果
						int result = Integer.parseInt(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)), 16);
						aaData.getDataList().add(result);
						num += 1;



						//司机签到，平台要的数据
						aaData.getDataList().add(Tools.byteTobyte(dataContent, 0, 16+19+6+6));
						// SendDateToSerial.witeSerialInfo("MeterDecoder-开机结果通用应答ack",
						// EncoderSZ55aa.answerResult(mid, SerialConstants.ACK));
						MeterBusinessProcess.processMeter(aaData, context);
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					break;
				case 0x00E3: // 请求关机
					try {
						int num = 0;
						// 开机标识 byte
						aaData.getDataList().add(Integer.parseInt(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)), 16));
						MeterBusinessProcess.processMeter(aaData, context);
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					break;
				case 0x00E4:
					try {
						sendInfo2DIDA(2, dataContent);

						ConstantsState.setStateValue(3, "1");
						DDUtil.sendText2TT(3);
						int num = 0;
						// 签退数据所需计价器数据
						aaData.getDataList().add(dataContent);
						// 单位代码 BCD[16]
						aaData.getDataList().add(Tools.byteToString(dataContent, num, 16));
						num += 16;
						// 司机代码 BCD[19] 车辆自编号+司机编码，6位，不足的前面补0
						aaData.getDataList().add(Tools.byteToString(dataContent, num, 19));
						num += 19;
						// 车牌号 BYTE[6] 车辆自编号，5位，前面补0，ASCII字符
						aaData.getDataList().add(Tools.byteToStringASCII(dataContent, num, 6));
						num += 6;
						// 计价器K值 BCD[2] 格式为XXXX，最大9999，暂时填0
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 当班开机时间 BCD[6] YYYY-MM-DD-hh-mm
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 6)));
						num += 6;
						// 当班关机时间 BCD[6] YYYY-MM-DD-hh-mm
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 6)));
						num += 6;
						// 当班公里 BCD[3] 格式为XXXXX.X公里
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 3)));
						num += 3;
						// 当班营运公里 BCD[3] 格式为XXXXX.X公里
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 3)));
						num += 3;
						// 车次 BCD[2] 格式为XXXX，最大9999（保留，填0）
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 计时时间 BCD[3] hh-mm-ss（总计费时间），是部标内容，有业务需求，请确认能否上传
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 3)));
						num += 3;
						// 总计金额 BCD[3] 格式XXXXX.X元
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 3)));
						num += 3;
						// 卡收金额 BCD[3] 格式XXXXX.X元
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 3)));
						num += 3;
						// 卡次 BCD[2] 袼式为XXKX，最大9999
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 班间公里 BCD[2] 格式XXX.X公里（上一班签退到本班签 到的公里数）
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 总计公里 BCD[4] 格式为XXXXX.X公里（计价器安装后累积）
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 4)));
						num += 4;
						// 总营运公里 BCD[4] 格式为XXXXX.X公里（计价器安装后累积）
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 4)));
						num += 4;
						// 单价 BCD[2] 格式XX.XX元
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 总营运次数 UINT32 高位在前，低位在后
						aaData.getDataList().add(Integer.parseInt(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 4)), 16));
						num += 4;



						MeterBusinessProcess.processMeter(aaData, context);
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					break;
				case 0x00E9:
					try {

						/**
						 bit0（最低位）——空重车状；
						 0表示空车；1表示重车；
						 bit1——停运（签退）状态；
						 0 为签退，1为营运
						 bit2——开机状态；
						 0为正常情况 1 为强制开机
						 bit3——关机状态；
						 0为正常情况 1 为强制关机
						 Bit6 –空车牌状态
						 0空车  1重车[18-6-7 添加]
						 bit7（最高位）——异常速度信号；
						 0为正常情况 1 为异常情况
						 */

//						String jjq_status = new StringBuilder(Tools.byteTobit(Tools.byteTobyte(dataContent, 0, 1))).reverse().toString();
//						Log.e("计价器心跳", jjq_status);
//						if(jjq_status.charAt(1)=='0'){//0 为签退，1为营运
//							Log.e("计价器心跳", "签退");
//							if(MainApplication.setDDStatus>0){
//								MainApplication.setDDStatus--;
//								DDUtil.sendText2TT(3);
//							}
//							ConstantsState.setStateValue(3, "1");
//							if(MainApplication.topActivity!=null) MainApplication.topActivity.sendMsg(1011, false);
//						}else{
//							if(jjq_status.charAt(0)=='0'){// 0表示空车；1表示重车；
//								Log.e("计价器心跳", "营运-空车");
//								MyStatus.zhongche = false;
//								ConstantsState.setStateValue(9, "0");
//								ConstantsState.setStateValue(3, "0");
//								if(MainApplication.setDDStatus>0){
//									MainApplication.setDDStatus--;
//									DDUtil.sendText2TT(1);
//								}
//								if(MainApplication.topActivity!=null) MainApplication.topActivity.sendMsg(1011, true);
//								if(ActivityMain.yyThread){
//									if(MainApplication.topActivity!=null) MainApplication.topActivity.sendMsg(1018, false);
//								}
//							}else{
//								Log.e("计价器心跳", "运营-重车");
//								MyStatus.zhongche = true;
//								ConstantsState.setStateValue(9, "1");
//								ConstantsState.setStateValue(3, "0");
//								if(MainApplication.setDDStatus>0){
//									MainApplication.setDDStatus--;
//									DDUtil.sendText2TT(5);
//								}
//								if(MainApplication.topActivity!=null) MainApplication.topActivity.sendMsg(1011, true);
//								if(!ActivityMain.yyThread){
//									if(MainApplication.topActivity!=null) MainApplication.topActivity.sendMsg(1018, true);
//								}
//							}
//						}




						AppLog.e("计价器心跳");
						int num = 0;
						// 计价器状态    1-开机-运营         0-开机-空车      10-签退---------聚利
						// 计价器状态 11-开机-运营       10-开机-空车        0-签退---------通用
						String xt = Long.toString(Tools.byteTobyte(dataContent, num, 1)[0] & 0xff, 2);
						num+=1;
						AppLog.e("计价器心跳", xt);
						if (xt.equals(((DataUtil.getJJQ())==1)?"1":"11")) {
							if(jlbug&&DataUtil.getJJQ()==1){
								jlbug = false;
							}else{
								AppLog.e("计价器心跳", "开机-运营");
								MyStatus.zhongche = true;
								ConstantsState.setStateValue(9, "1");
								ConstantsState.setStateValue(3, "0");
								if(MainApplication.setDDStatus>0){
									MainApplication.setDDStatus--;
									DDUtil.sendText2TT(5);
								}
								if(MainApplication.topActivity!=null) MainApplication.topActivity.sendMsg(1011, true);
							}
						}
						if (xt.equals(((DataUtil.getJJQ())==1)?"0":"10")) {
							AppLog.e("计价器心跳", "开机-空车");
							MyStatus.zhongche = false;
							ConstantsState.setStateValue(9, "0");
							ConstantsState.setStateValue(3, "0");
							if(MainApplication.setDDStatus>0){
								MainApplication.setDDStatus--;
								DDUtil.sendText2TT(1);
							}
							if(MainApplication.topActivity!=null) MainApplication.topActivity.sendMsg(1011, true);
						}
						if (xt.equals(((DataUtil.getJJQ())==1)?"10":"0")) {
							AppLog.e("计价器心跳", "签退");
							if(MainApplication.setDDStatus>0){
								MainApplication.setDDStatus--;
								DDUtil.sendText2TT(3);
							}
							ConstantsState.setStateValue(3, "1");
							if(MainApplication.topActivity!=null) MainApplication.topActivity.sendMsg(1011, false);
						}

//					qiyeCode_jjq = Tools.byteToString(Tools.byteTobyte(dataContent, num, 16), 0, 16);
						num+=16;
					sijiCode_jjq = Tools.byteToString(Tools.byteTobyte(dataContent, num, 19), 0, 19);
					AppLog.e("测试司机信息：-计价器-司机-"+sijiCode_jjq+"  企业-"+qiyeCode_jjq);

						MeterBusinessProcess.processMeter(aaData, context);
					} catch (Exception e) {
						e.printStackTrace();
					}
					break;


				case 0x0002: // 关机发送驾驶员从业资格信息应答
					try {
						int num = 0;
						// 操作结果
						aaData.getDataList().add(Integer.parseInt(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)), 16));
						num += 1;
						MeterBusinessProcess.processMeter(aaData, context);
					} catch (Exception e) {
						e.printStackTrace();
					}
					break;
//			case 0x003C: // 关机结果
//				try {
//					int num = 0;
//					// 操作结果
//					int result = Integer.parseInt(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)), 16);
//					aaData.getDataList().add(result);
//					num += 1;
//					if (result == 0x90) {
//						/*
//						 * // 退签类型 int type =
//						 * Integer.parseInt(Tools.parseByte2HexStr
//						 * (Tools.byteTobyte(dataContent, dataContent.length-1,
//						 * 1)),16); aaData.getDataList().add(type);
//						 */
//						// 数据
//						aaData.getDataList().add(Tools.byteTobyte(dataContent, num, dataContent.length - num));
//						SendDateToSerial.witeSerialInfo("MeterDecoder-关机结果应答ack"ncoderSZ55aa.answerResult(mid, SerialConstants.ACK));
//						/*
//						 * if(type != 2){ // 自动退签 // 数据
//						 * aaData.getDataList().add(
//						 * Tools.byteTobyte(dataContent, num,
//						 * dataContent.length-num-1));
//						 * SendDateToSerial.witeSerialInfo
//						 * (EncoderSZ55aa.answerResult(mid,
//						 * SerialConstants.ACK)); }else{
//						 *
//						 * }
//						 */
//					} else {
//						SendDateToSerial.witeSerialInfo("MeterDecoder-关机结果应答nak"ncoderSZ55aa.answerResult(mid, SerialConstants.NAK));
//					}
//					MeterBusinessProcess.processMeter(aaData, context);
//				} catch (Exception e) {
//					// TODO Auto-generated catch block
//					e.printStackTrace();
//				}
//				break;
				case 0x00F1: // 当班数据汇总补传
					try {
						int num = 0;
						// 签退数据所需计价器数据
						aaData.getDataList().add(dataContent);
						// 单位代码 BCD[16]
						aaData.getDataList().add(Tools.byteToString(dataContent, num, 16));
						num += 16;
						// 司机代码 BCD[19] 车辆自编号+司机编码，6位，不足的前面补0
						aaData.getDataList().add(Tools.byteToString(dataContent, num, 19));
						num += 19;
						// 车牌号 BYTE[6] 车辆自编号，5位，前面补0，ASCII字符
						aaData.getDataList().add(Tools.byteToStringASCII(dataContent, num, 6));
						num += 6;
						// 计价器K值 BCD[2] 格式为XXXX，最大9999，暂时填0
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 当班开机时间 BCD[6] YYYY-MM-DD-hh-mm
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 6)));
						num += 6;
						// 当班关机时间 BCD[6] YYYY-MM-DD-hh-mm
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 6)));
						num += 6;
						// 当班公里 BCD[3] 格式为XXXXX.X公里
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 3)));
						num += 3;
						// 当班营运公里 BCD[3] 格式为XXXXX.X公里
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 3)));
						num += 3;
						// 车次 BCD[2] 格式为XXXX，最大9999（保留，填0）
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 计时时间 BCD[3] hh-mm-ss（总计费时间），是部标内容，有业务需求，请确认能否上传
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 3)));
						num += 3;
						// 总计金额 BCD[3] 格式XXXXX.X元
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 3)));
						num += 3;
						// 卡收金额 BCD[3] 格式XXXXX.X元
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 3)));
						num += 3;
						// 卡次 BCD[2] 袼式为XXKX，最大9999
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 班间公里 BCD[2] 格式XXX.X公里（上一班签退到本班签 到的公里数）
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 总计公里 BCD[4] 格式为XXXXX.X公里（计价器安装后累积）
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 4)));
						num += 4;
						// 总营运公里 BCD[4] 格式为XXXXX.X公里（计价器安装后累积）
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 4)));
						num += 4;
						// 单价 BCD[2] 格式XX.XX元
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 总营运次数 UINT32 高位在前，低位在后
						aaData.getDataList().add(Integer.parseInt(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 4)), 16));
						num += 4;

						MeterBusinessProcess.processMeter(aaData, context);
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					break;
//			case 0x003A: // 临时（强制）开机
//				try {
//					int num = 0;
//					// 操作结果
//					int result = Integer.parseInt(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)), 16);
//					aaData.getDataList().add(result);
//					num += 1;
//					if (result == 0x90) {
//						// 管理卡卡号 BYTE[19] ASCII字符，不足的左补0x30
//						/*
//						 * String code = Tools.byteToString(dataContent, 17,
//						 * 19);
//						 */
//						// 数据
//						aaData.getDataList().add(Tools.byteTobyte(dataContent, num, dataContent.length - num));
//						SendDateToSerial.witeSerialInfo("MeterDecoder-强制开机ack"ncoderSZ55aa.answerResult(mid, SerialConstants.ACK));
//					} else {
//						SendDateToSerial.witeSerialInfo("MeterDecoder-强制开机nak"ncoderSZ55aa.answerResult(mid, SerialConstants.NAK));
//					}
//					MeterBusinessProcess.processMeter(aaData, context);
//				} catch (Exception e) {
//					e.printStackTrace();
//				}
//				break;
//			case 0x00F9: // 心跳
//				try {
//					SendDateToSerial.witeSerialInfo("MeterDecoder-计价器状态查询-心跳", MeterEncoder.queryMeterState());
//					int num = 0;
//					// 当前状态
//					aaData.getDataList().add(Tools.byteTobit(Tools.byteTobyte(dataContent, num, 1)));
//					num += 1;
//					// 单位代码
//					aaData.getDataList().add(Tools.byteToString(dataContent, num, 16));
//					num += 16;
//					// 从业资格证号
//					aaData.getDataList().add(Tools.byteToString(dataContent, num, 19));
//					num += 19;
//					// 计价器时间
//					aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 7)));
//					num += 7;
//					// 命令返回码
//					aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
//					num += 2;
//					// 设备编号
//					aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 5)));
//					num += 5;
//					// 附加费
//					aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 3)));
//					num += 3;
//					// 电召费
//					aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 3)));
//					num += 3;
//					MeterBusinessProcess.processMeter(aaData, context);
//				} catch (Exception e) {
//					// TODO Auto-generated catch block
//					e.printStackTrace();
//				}
//				break;
				case 0x0000: // 计价器状态查询应答数据消息
					try {
						ActivityPower.jjqtime = System.currentTimeMillis();//用于判断计价器是否连接
						int num = 0;
						// 设备编号
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 5)));
						num += 5;
						// 设备硬件版本号
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 1)));
						num += 1;
						// 软件主版本号
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 1)));
						num += 1;
						// 软件次版本号
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 1)));
						num += 1;
						// 设备状态
						aaData.getDataList().add(Integer.parseInt(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)), 16));
						num += 1;
						// 计价器工作状态
						aaData.getDataList().add(Integer.parseInt(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)), 16));
						num += 1;
						// 车牌号
						String carnumber = Tools.byteToString(Tools.byteTobyte(dataContent, num, 6), 0, 6);
						aaData.getDataList().add(carnumber);
						num += 6;
						// 单位代码
						aaData.getDataList().add(Tools.byteToString(Tools.byteTobyte(dataContent, num, 16), 0, 16));
						num += 16;
						// 司机从业资格证号
						aaData.getDataList().add(Tools.byteToString(Tools.byteTobyte(dataContent, num, 19), 0, 19));
						num += 19;
						// 总营运次数
						aaData.getDataList().add(Integer.parseInt(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 4)), 16));
						num += 4;
						// 处理相关业务
						MeterBusinessProcess.processMeter(aaData, context);
					} catch (Exception e) {
						AppLog.e(ExceptionUtil.getInfo(e));
						e.printStackTrace();
					}
					break;
				case 0x0004: // 运价参数查询
					try {
						int num = 0;
						// 参数启用时间
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 5)));
						num += 5;
						// 白天往返单价
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 夜间往返单价
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 白天单程单价
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 夜间单程单价
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 白天二次空贴单价
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 夜间二次空贴单价
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 白天起步价
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 夜间起步价
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 续程公里数
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 起程公里
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 单程公里
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 二次空贴公里
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 白天等候时间单价
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 夜间等候时间单价
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 免费等候时间
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 加价时间
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 夜间开始时间
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// 夜间结束时间
						aaData.getDataList().add(Tools.bcd2Str(Tools.byteTobyte(dataContent, num, 2)));
						num += 2;
						// RFU
						aaData.getDataList().add(Tools.byteToString(Tools.byteTobyte(dataContent, num, 22), 0, 22));
						num += 22;
						// 厂商自定义参数区
						aaData.getDataList().add(Tools.byteToString(Tools.byteTobyte(dataContent, num, 64), 0, 64));
						num += 64;
						// 处理相关业务
						MeterBusinessProcess.processMeter(aaData, context);
						meterConfigTask.cacheParam(dataContent);
					} catch (Exception e) {
						// TODO: handle exception
						AppLog.e(ExceptionUtil.getInfo(e));
						e.printStackTrace();
					}
					break;
				case 0x0005: // 计价器参数结果
					meterConfigTask.settingParamInfo(dataContent);
					break;
//			case 0x003B: // 锁定计价器应答
//				try {
//					int num = 0;
//					// 操作结果
//					int result = Integer.parseInt(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)), 16);
//					aaData.getDataList().add(result);
//					num += 1;
//					if (result == 0x90) {
//						// 数据
//						aaData.getDataList().add(Tools.byteTobyte(dataContent, num, dataContent.length - num - 1));
//						SendDateToSerial.witeSerialInfo("MeterDecoder-锁定计价器应答ACK"ncoderSZ55aa.answerResult(mid, SerialConstants.ACK));
//					} else {
//						SendDateToSerial.witeSerialInfo("MeterDecoder-锁定计价器应答NAK"ncoderSZ55aa.answerResult(mid, SerialConstants.NAK));
//					}
//					MeterBusinessProcess.processMeter(aaData, context);
//				} catch (Exception e) {
//					// TODO Auto-generated catch block
//					e.printStackTrace();
//				}
//			case 0x003D: // 解锁计价器应答
//				try {
//					int num = 0;
//					// 操作结果
//					int result = Integer.parseInt(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)), 16);
//					aaData.getDataList().add(result);
//					num += 1;
//					MeterBusinessProcess.processMeter(aaData, context);
//				} catch (Exception e) {
//					// TODO Auto-generated catch block
//					e.printStackTrace();
//				}
//			case 0x003F: // 解锁计价器应答
//				try {
//					// 计价器数据
//					aaData.getDataList().add(dataContent);
//					MeterBusinessProcess.processMeter(aaData, context);
//				} catch (Exception e) {
//					// TODO Auto-generated catch block
//					e.printStackTrace();
//				}
//				break;
//			case 0x00FF: // 升级应答
//				try {
//					int num = 0;
//					// 操作结果
//					int result = Integer.parseInt(Tools.parseByte2HexStr(Tools.byteTobyte(dataContent, num, 1)), 16);
//					aaData.getDataList().add(result);
//					MeterBusinessProcess.processMeter(aaData, context);
//				} catch (Exception e) {
//					// TODO Auto-generated catch block
//					e.printStackTrace();
//				}
//				break;
				default:
					break;
			}

		} catch (Exception e) {
			AppLog.e(ExceptionUtil.getInfo(e));
			e.printStackTrace();
		}
	}

	public static int lastType = 0;
	public static long lastSendTime = 0;
	public static void sendInfo2DIDA(int type, byte[] info){

		if(MainApplication.topActivity!=null){
			MainApplication.topActivity.sendInfoBroadcast(type, info);
		}
	}

}
